package org.japo.java.swing.igu;

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import org.japo.java.swing.listeners.GEA;

public class IGU extends JFrame {

    // Factor de conversión E > D
    private double factor = 1.32;

    // Referencias a los componentes
    private JTextField txfDolar;
    private JTextField txfEuro;

    public IGU() {
        iniciarComponentes();
    }

    private void iniciarComponentes() {
        // Panel principal
        JPanel pnlPrincipal = new JPanel();

        // Modifica la separación del layout
        FlowLayout lf = (FlowLayout) pnlPrincipal.getLayout();
        lf.setHgap(10);
        lf.setVgap(10);

        // Dimensiones
        Dimension dimLabel = new Dimension(70, 30);
        Dimension dimTexto = new Dimension(150, 30);

        // Fuente
        Font f = new Font("Calibri", Font.BOLD, 20);

        // GEA
        GEA gea = new GEA(this);

        // Campo de Euros
        txfEuro = new JTextField("0.0");
        txfEuro.setHorizontalAlignment(JTextField.RIGHT);
        txfEuro.setPreferredSize(dimTexto);
        txfEuro.setFont(f);
        txfEuro.addActionListener(gea);
        pnlPrincipal.add(txfEuro);

        // Etiqueta Euro
        JLabel lblEuro = new JLabel("Euros");
        lblEuro.setPreferredSize(dimLabel);
        lblEuro.setFont(f);
        pnlPrincipal.add(lblEuro);

        // Campo de Dólares
        txfDolar = new JTextField("0.0");
        txfDolar.setHorizontalAlignment(JTextField.RIGHT);
        txfDolar.setPreferredSize(dimTexto);
        txfDolar.setFont(f);
        txfDolar.addActionListener(gea);
        pnlPrincipal.add(txfDolar);

        // Etiqueta Dólar
        JLabel lblDolar = new JLabel("Dólares");
        lblDolar.setPreferredSize(dimLabel);
        lblDolar.setFont(f);
        pnlPrincipal.add(lblDolar);

        // Ventana
        setTitle("Conversor");
        setResizable(false);
        setContentPane(pnlPrincipal);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setSize(300, 130);
    }

    public void procesarConversion(ActionEvent ae) {
        // Referencia al control que ha generado el evento
        Object o = ae.getSource();

        // Discriminar la conversión
        if (o.equals(txfEuro)) {
            convertirEuros();
        } else {
            convertirDolares();
        }
    }

    public double getFactor() {
        return factor;
    }

    public void setFactor(double factor) {
        this.factor = factor;
    }

    private void convertirEuros() {
        try {
            String textoEuros = txfEuro.getText();
            double dineroEuros = Double.parseDouble(textoEuros);
            double dineroDolar = dineroEuros * getFactor();
            String textoDolar = String.format("%.2f", dineroDolar);
            txfDolar.setText(textoDolar);
        } catch (Exception e) {
            txfDolar.setText("???");
        }
    }

    private void convertirDolares() {
        try {
            String textoDolar = txfDolar.getText();
            double dineroDolar = Double.parseDouble(textoDolar);
            double dineroEuro = dineroDolar / getFactor();
            String textoEuro = String.format("%.2f", dineroEuro);
            txfEuro.setText(textoEuro);
        } catch (Exception e) {
            txfEuro.setText("???");
        }
    }
}
